#pragma once
#define STRICT
#define WIN32_LEAN_AND_MEAN

#include <Windows.h>
#include <mmsystem.h>
#include <time.h>
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <sstream>
#include <algorithm>

#include <d3d9.h>
#include <d3dx9.h>

#ifdef DEBUG
#pragma comment(lib, "lua_d.lib")
#pragma comment(lib, "luabind_d.lib")
#else
#pragma comment(lib, "lua.lib")
#pragma comment(lib, "luabind.lib")
#endif

extern "C"
{
	#include "lualib.h"
}

#include <luabind/luabind.hpp>


#undef Interface
#define Interface class __declspec(novtable)


class lua
{
public:
	static lua_State* State() { return mLuaState; }
	static void Create() { mLuaState = luaL_newstate(); }
	static void Close() { lua_close(mLuaState); }
private:
	static lua_State* mLuaState;
};

class globals
{
public:
	static HINSTANCE hInstance;
	static LPDIRECT3D9 d3d; //Wird im dtor von MainWindow freigegeben
	static LPDIRECT3DDEVICE9 d3dDevice; //Wird im dtor von MainWindow freigegeben
	static D3DXMATRIX matIdentity;
};

class Game;
class MainWindow;

#include "IDrawable.h"

#include "ParticleEmitter.h"
#include "ParticleSystem.h"
#include "Plane.h"
#include "StaticMesh.h"
#include "DynamicMesh.h"

#include "Camera.h"

#include "MainWindow.h"
#include "Game.h"